8 Redes Recorrentes
Dados sequenciais possuem ordem e dependências entre posições. Em uma frase, o significado de uma palavra depende das anteriores; em uma série temporal, uma medida recente ajuda a interpretar a seguinte. Uma rede feedforward comum recebe um vetor de tamanho fixo e não mantém, por si só, um estado entre passos.
Uma rede neural recorrente (RNN) introduz um estado oculto que é atualizado ao longo da sequência. A mesma transformação é reutilizada em todos os instantes, permitindo processar sequências de diferentes comprimentos.
8.1 Rede recorrente de Elman
Seja \(x_t\in\mathbb R^{d_x}\) a entrada no instante \(t\) e \(h_t\in\mathbb R^{d_h}\) o estado oculto. Uma RNN simples de Elman calcula
\[ h_t =\phi(W_{xh}x_t+W_{hh}h_{t-1}+b_h), \tag{8.1}\]
\[ o_t=W_{hy}h_t+b_y, \qquad \widehat y_t=\psi(o_t). \tag{8.2}\]
Os parâmetros possuem formatos
\[ W_{xh}\in\mathbb R^{d_h\times d_x}, \quad W_{hh}\in\mathbb R^{d_h\times d_h}, \quad W_{hy}\in\mathbb R^{d_y\times d_h}. \]
A ativação \(\phi\) costuma ser tanh em uma RNN simples. A função \(\psi\) depende da tarefa: identidade para regressão, sigmoide para saída binária ou softmax para classes exclusivas.
O estado inicial \(h_0\) pode ser zero, um parâmetro aprendido ou um vetor fornecido por outro modelo. Essa escolha faz parte da especificação da arquitetura.
8.1.1 Memória como estado
A equação Equation 8.1 combina a observação atual com um resumo do passado. O estado não armazena literalmente todos os itens anteriores; ele é uma representação de dimensão fixa, atualizada recursivamente:
\[ h_t=F_\theta(x_t,h_{t-1}). \]
Duas sequências com o mesmo último elemento podem produzir estados diferentes porque percorreram históricos distintos. Ao mesmo tempo, um estado pequeno pode perder detalhes relevantes de sequências longas.
8.1.2 Desdobramento no tempo
Embora o diagrama recorrente contenha um ciclo, para uma sequência finita podemos desdobrá-lo em uma cadeia. Cada cópia visual representa a mesma célula em um instante diferente; os parâmetros são compartilhados.

O compartilhamento traz duas consequências:
- o número de parâmetros não cresce com o comprimento da sequência;
- gradientes de todos os instantes contribuem para as mesmas matrizes.
Uma RNN com \(T=100\) passos não possui cem matrizes \(W_{hh}\); possui uma matriz usada cem vezes.
8.1.3 Formatos de entrada e saída
Redes recorrentes podem ser organizadas de acordo com a tarefa:
- sequência para sequência: um rótulo por passo, como etiquetagem de palavras;
- sequência para vetor: uma saída após ler toda a sequência, como classificação de texto;
- vetor para sequência: uma condição inicial gera vários passos;
- sequência para sequência com comprimentos diferentes: um codificador produz uma representação usada por um decodificador.
Em lote, uma entrada costuma ter formato \(B\times T\times d_x\): exemplos, tempo e atributos. Sequências de comprimentos diferentes podem ser preenchidas até um tamanho comum, mas uma máscara deve impedir que posições artificiais contribuam para a perda ou para métricas.
Preenchimento não cria informação. Além disso, processar uma sequência muito além de seu comprimento real pode alterar estados se a implementação não respeitar a máscara.
8.1.4 Propagação para frente
import numpy as np
def rnn_elman(X, W_xh, W_hh, b_h, W_hy, b_y, h0=None):
"""X tem formato (lote, tempo, atributos)."""
B, T, _ = X.shape
d_h = W_hh.shape[0]
h = np.zeros((B, d_h)) if h0 is None else h0.copy()
estados, saidas = [], []
for t in range(T):
h = np.tanh(X[:, t, :] @ W_xh.T + h @ W_hh.T + b_h)
o = h @ W_hy.T + b_y
estados.append(h.copy())
saidas.append(o)
H = np.stack(estados, axis=1)
O = np.stack(saidas, axis=1)
return O, HO laço temporal é sequencial: \(h_t\) depende de \(h_{t-1}\). Dentro de cada passo, todos os exemplos e todas as unidades são vetorizados.
8.1.5 Retropropagação através do tempo
A retropropagação através do tempo (BPTT) aplica backpropagation ao grafo desdobrado. Se a perda total é
\[ E=\sum_{t=1}^{T}\ell_t(\widehat y_t,y_t), \]
o estado \(h_t\) pode influenciar a perda no próprio passo e todas as perdas futuras. Sua derivada acumula esses caminhos. Em uma forma simplificada,
\[ \frac{\partial E}{\partial h_t} = \frac{\partial\ell_t}{\partial h_t} + \frac{\partial E}{\partial h_{t+1}} \frac{\partial h_{t+1}}{\partial h_t}. \]
Para a recorrência de Elman,
\[ \frac{\partial h_{t+1}}{\partial h_t} = \operatorname{diag}\!\left( \phi'(z_{t+1}) \right)W_{hh}. \]
Produtos repetidos desses Jacobianos explicam dois problemas:
- gradientes que desaparecem: normas menores que um são multiplicadas repetidamente, enfraquecendo dependências longas;
- gradientes que explodem: normas maiores que um podem crescer rapidamente e desestabilizar o treinamento.
Clipping da norma do gradiente ajuda no segundo caso. Células LSTM e GRU criam caminhos de estado controlados por portas e foram projetadas para facilitar o aprendizado de dependências mais longas; elas reduzem, mas não eliminam, todas as dificuldades.
8.1.6 BPTT truncada
Guardar o grafo de uma sequência muito longa consome memória e aumenta o caminho das derivadas. Na BPTT truncada, processamos blocos de \(K\) passos, transportamos o valor do estado para o bloco seguinte, mas interrompemos o grafo de derivação na fronteira.
Isso reduz custo e memória, porém impede que o gradiente atribua crédito diretamente a eventos anteriores à janela. O comprimento \(K\) é, portanto, um hiperparâmetro computacional e estatístico.
8.1.7 Relação com redes feedforward
Uma RNN desdobrada se parece com uma rede profunda, mas possui duas diferenças essenciais:
- a profundidade efetiva depende do comprimento da sequência;
- os parâmetros das cópias temporais são compartilhados.
Redes feedforward também podem receber uma janela fixa de observações, mas a janela precisa ser escolhida previamente e cada posição costuma ter parâmetros distintos. RNNs oferecem uma regra recorrente aplicável a comprimentos variados.
Hoje, mecanismos de atenção e Transformers são alternativas importantes para muitos problemas sequenciais porque permitem caminhos mais curtos entre posições e maior paralelismo. Ainda assim, RNNs permanecem úteis em fluxos contínuos, modelos compactos e cenários com processamento passo a passo.
Embaralhar a ordem dos exemplos independentes entre épocas costuma ser adequado. Embaralhar os passos dentro de cada sequência destrói a estrutura temporal que a recorrência deve aprender.
8.1.7.1 Exercícios
- Verifique os formatos em Equation 8.1 e Equation 8.2.
- Quantos parâmetros possui uma RNN com \(d_x=10\), \(d_h=32\) e \(d_y=5\)?
- Explique por que o número de parâmetros não depende de \(T\).
- Diferencie preenchimento, máscara e BPTT truncada.
- Mostre como produtos repetidos de um escalar \(|\lambda|<1\) ajudam a entender o desaparecimento do gradiente.
- Quando uma saída por passo é necessária e quando apenas \(h_T\) pode ser suficiente?
8.2 Mapas Auto-Organizáveis
Um mapa auto-organizável (Self-Organizing Map, SOM) é um método de aprendizado não supervisionado que representa dados de alta dimensão por uma grade, geralmente bidimensional, de protótipos. Pontos próximos no espaço dos dados tendem a ativar unidades próximas na grade.
O SOM não descobre rótulos verdadeiros nem aproxima uma “função divina”. Ele produz uma representação exploratória cuja interpretação depende dos dados, da escala dos atributos e dos hiperparâmetros.
8.2.1 Três objetos distintos
Considere dados \(x\in\mathbb R^d\) e \(M\) unidades. Cada unidade \(i\) possui:
- uma posição fixa \(r_i\in\mathbb R^q\) na grade, normalmente \(q=2\);
- um protótipo treinável \(w_i\in\mathbb R^d\) no espaço dos dados.
As distâncias \(\lVert x-w_i\rVert\) comparam um exemplo aos protótipos. As distâncias \(\lVert r_i-r_j\rVert\) comparam posições na grade. Misturar esses dois espaços torna o algoritmo incorreto.

8.2.2 Unidade de melhor correspondência
Para um exemplo \(x_t\), a unidade vencedora, ou BMU (best matching unit), é
\[ c_t =\operatorname*{arg\,min}_{i=1,\ldots,M} \lVert x_t-w_i(t)\rVert^2. \tag{8.3}\]
Usar a distância ou seu quadrado produz a mesma vencedora e evita a raiz quadrada no cálculo.
8.2.3 Função de vizinhança
A influência da vencedora sobre a unidade \(i\) pode ser gaussiana:
\[ H_{c_ti}(t) =\exp\!\left( -\frac{\lVert r_i-r_{c_t}\rVert^2}{2\sigma(t)^2} \right). \tag{8.4}\]
Essa função não é uma métrica: ela é máxima em unidades próximas e diminui com a distância. O parâmetro \(\sigma(t)>0\) é o raio de vizinhança. O quadrado em \(\sigma(t)^2\) é necessário na forma gaussiana usual.
8.2.4 Regra de atualização
Todos os protótipos são atualizados por
\[ w_i(t+1) =w_i(t) +\eta(t)H_{c_ti}(t) \bigl(x_t-w_i(t)\bigr), \tag{8.5}\]
onde \(0<\eta(t)<1\) é a taxa de aprendizado. A BMU se move mais; suas vizinhas também se aproximam do exemplo, preservando ordem local na grade.
No início, raio e taxa maiores promovem organização global. Depois, ambos diminuem para permitir ajustes locais. Um cronograma exponencial possível para \(t=0,\ldots,T-1\) é
\[ \eta(t)=\eta_0 \left(\frac{\eta_f}{\eta_0}\right)^{t/(T-1)}, \qquad \sigma(t)=\sigma_0 \left(\frac{\sigma_f}{\sigma_0}\right)^{t/(T-1)}. \]
Os valores finais devem ser positivos. Reduzir o raio a zero cedo demais transforma o treinamento em competição independente e prejudica a organização topológica.
8.2.5 Algoritmo
- Padronizar os atributos quando suas escalas não forem comparáveis.
- Criar as posições \(r_i\) de uma grade e inicializar os protótipos \(w_i\).
- Para cada iteração:
- escolher um exemplo, normalmente com ordem embaralhada;
- encontrar a BMU por Equation 8.3;
- calcular a influência na grade por Equation 8.4;
- atualizar os protótipos por Equation 8.5;
- reduzir \(\eta(t)\) e \(\sigma(t)\).
- Associar cada exemplo à posição de sua BMU para visualizar o mapa.
Inicialização aleatória é simples; amostrar exemplos ou inicializar na direção das primeiras componentes principais pode acelerar a organização. Diferentes sementes podem produzir orientações distintas da grade sem que uma delas seja necessariamente errada.
8.2.6 Exemplo de uma atualização
Considere dois protótipos
\[ w_1=(0{,}5,0{,}6,0{,}8), \qquad w_2=(0{,}4,0{,}2,0{,}5) \]
e o exemplo \(x=(0{,}8,0{,}7,0{,}4)\). As distâncias quadráticas são
\[ \lVert x-w_1\rVert^2 =0{,}3^2+0{,}1^2+(-0{,}4)^2 =0{,}26, \]
\[ \lVert x-w_2\rVert^2 =0{,}4^2+0{,}5^2+(-0{,}1)^2 =0{,}42. \]
Logo, a BMU é a unidade 1. Com \(\eta=0{,}5\), influência \(H_{11}=1\) e, para simplificar, influência zero sobre a outra unidade,
\[ \begin{aligned} w_1' &=w_1+0{,}5(x-w_1)\\ &=(0{,}5,0{,}6,0{,}8) +0{,}5(0{,}3,0{,}1,-0{,}4)\\ &=(0{,}65,0{,}65,0{,}60). \end{aligned} \]
O protótipo se deslocou até o ponto médio entre seu valor anterior e o exemplo. Como somente a vencedora foi atualizada, este é o caso limite de aprendizado competitivo, semelhante ao k-means on-line. O comportamento distintivo do SOM aparece quando unidades vizinhas também recebem influência positiva.
Por exemplo, se \(H_{12}=0{,}4\), então
\[ w_2' =w_2+0{,}5\cdot0{,}4(x-w_2) =(0{,}48,0{,}30,0{,}48). \]
A unidade 2 também se move, mas por uma fração menor.
8.2.7 Implementação NumPy
import numpy as np
def passo_som(x, prototipos, posicoes, taxa, sigma):
x = np.asarray(x, dtype=float)
W = np.asarray(prototipos, dtype=float)
R = np.asarray(posicoes, dtype=float)
dist_dados = np.sum((W - x) ** 2, axis=1)
bmu = np.argmin(dist_dados)
dist_grade = np.sum((R - R[bmu]) ** 2, axis=1)
influencia = np.exp(-dist_grade / (2 * sigma**2))
W += taxa * influencia[:, None] * (x - W)
return bmu, WO índice \(\texttt{[:, None]}\) transforma a influência de formato \(M\) em uma coluna \(M\times1\), permitindo multiplicá-la pelas diferenças \(M\times d\) por broadcasting.
8.2.8 Avaliação e visualização
Como não há rótulo obrigatório, usamos critérios internos e inspeção:
- erro de quantização: média da distância de cada exemplo ao protótipo de sua BMU;
- erro topográfico: frequência com que a primeira e a segunda BMUs não são vizinhas na grade;
- matriz U: visualização das distâncias entre protótipos vizinhos;
- distribuição de exemplos por unidade, para detectar unidades vazias ou concentração excessiva.
Baixo erro de quantização não garante boa preservação topológica. Aumentar o número de unidades tende a melhorar quantização, mas também pode criar um mapa esparso e mais difícil de interpretar.
8.2.9 Limitações e uso responsável
SOMs são sensíveis à escala dos atributos, inicialização, ordem dos exemplos, tamanho da grade e cronogramas. A proximidade na grade é uma aproximação da estrutura dos dados, não prova de que dois grupos sejam categorias naturais.
Quando rótulos externos existem, eles podem ser projetados sobre o mapa após o treinamento para interpretação, mas não devem ser apresentados como rótulos descobertos sem incerteza. PCA, t-SNE, UMAP, k-means e autoencoders respondem a objetivos diferentes e constituem comparações úteis conforme a aplicação.
8.2.9.1 Exercícios
- Diferencie \(r_i\) e \(w_i\), incluindo seus espaços e papéis.
- Calcule \(w_2'\) do exemplo e confirme cada coordenada.
- O que acontece com Equation 8.5 quando \(\sigma(t)\to0\)?
- Explique por que padronização pode mudar completamente a BMU.
- Compare erro de quantização e erro topográfico.
- Implemente uma grade \(3\times3\), gere suas posições e execute uma época do algoritmo.
8.2.10 Síntese do capítulo
RNNs processam sequências mantendo um estado e compartilhando parâmetros ao longo do tempo; seu treinamento desdobra a recorrência e aplica BPTT. SOMs pertencem a outra família: aprendizado competitivo não supervisionado com protótipos organizados em uma grade. Em ambos os casos, a estrutura do modelo — tempo na RNN, vizinhança no SOM — incorpora uma hipótese sobre relações importantes nos dados.
8.3 Exercícios de múltipla escolha
As cinco primeiras questões tratam de redes recorrentes; as demais tratam de mapas auto-organizáveis. Cada item possui uma única resposta correta.
Em uma rede recorrente de Elman, o estado oculto \(h_t\) depende tipicamente:
- apenas de \(x_t\).
- de \(x_t\) e do estado anterior \(h_{t-1}\).
- somente do rótulo final.
- de pesos diferentes e independentes em cada instante.
- apenas de \(x_t\).
“Desdobrar” uma RNN no tempo significa:
- representar as aplicações sucessivas da célula como um grafo ao longo dos instantes.
- duplicar fisicamente o conjunto de dados.
- remover todas as conexões recorrentes.
- ordenar os neurônios pelo valor do viés.
- representar as aplicações sucessivas da célula como um grafo ao longo dos instantes.
O compartilhamento de parâmetros ao longo do tempo permite que a RNN:
- aplique a mesma regra de transição em diferentes posições da sequência.
- tenha um modelo totalmente distinto para cada comprimento.
- dispense qualquer estado.
- produza apenas sequências de tamanho um.
- aplique a mesma regra de transição em diferentes posições da sequência.
Gradientes que desaparecem em sequências longas estão associados a:
- produtos repetidos de derivadas e matrizes com fatores contrativos.
- ausência completa da regra da cadeia.
- uso obrigatório de números inteiros.
- uma matriz de Gram muito grande.
- produtos repetidos de derivadas e matrizes com fatores contrativos.
A BPTT truncada reduz custo computacional ao:
- limitar o número de passos temporais pelos quais o gradiente é propagado.
- remover a propagação para frente.
- treinar somente o viés da saída.
- tornar toda sequência independente do passado.
- limitar o número de passos temporais pelos quais o gradiente é propagado.
Um mapa auto-organizável (SOM) é um método de aprendizado:
- supervisionado que exige um rótulo por exemplo.
- competitivo e não supervisionado.
- exclusivo para séries temporais rotuladas.
- baseado em retropropagação de entropia cruzada.
- supervisionado que exige um rótulo por exemplo.
A unidade de melhor correspondência (BMU) para uma entrada \(x\) é, em geral, o protótipo que:
- está mais distante de \(x\).
- possui menor distância a \(x\).
- ocupa sempre o canto superior esquerdo da grade.
- recebeu o maior rótulo de classe.
- está mais distante de \(x\).
Na atualização de um SOM, além da BMU, também são movidos:
- protótipos vizinhos na grade, com intensidade definida pela função de vizinhança.
- apenas exemplos do conjunto de teste.
- todos os protótipos pela mesma quantidade, obrigatoriamente.
- somente protótipos com rótulo correto.
- protótipos vizinhos na grade, com intensidade definida pela função de vizinhança.
Ao longo do treinamento de um SOM, é comum reduzir gradualmente:
- a taxa de aprendizado e o raio de vizinhança.
- a dimensão de cada vetor de entrada.
- o número de classes verdadeiras.
- a quantidade de coordenadas da grade em cada época.
- a taxa de aprendizado e o raio de vizinhança.
O erro de quantização de um SOM mede principalmente:
- a distância média entre cada exemplo e sua BMU.
- a acurácia de rótulos usados no treinamento supervisionado.
- o número de gradientes explosivos.
- a probabilidade PAC de falha.
- a distância média entre cada exemplo e sua BMU.
- b. O estado combina a entrada corrente com uma memória resumida do passado.
- a. O desdobramento explicita as dependências temporais e permite aplicar a regra da cadeia.
- a. Os mesmos pesos são reutilizados, o que expressa invariância da regra de processamento à posição temporal.
- a. Multiplicações sucessivas por fatores menores que um reduzem a magnitude do sinal de gradiente.
- a. A truncagem estabelece uma janela finita de retropropagação, trocando memória temporal longa por eficiência.
- b. O SOM aprende protótipos por competição e cooperação de vizinhança sem usar alvos durante o ajuste.
- b. A BMU minimiza a distância entre a entrada e os vetores protótipos.
- a. A cooperação local organiza protótipos próximos na grade para representar regiões próximas dos dados.
- a. Começar com vizinhança ampla favorece organização global; reduzi-la permite refinamento local.
- a. Essa distância resume a fidelidade com que os protótipos representam os dados, mas não mede sozinha a preservação topológica.